浅析Docker容器的两种运行模式及 docker run 的 |
您所在的位置:网站首页 › rm -rf *什么意思 › 浅析Docker容器的两种运行模式及 docker run 的 |
一、docker run 的 --rm 选项的作用
Docker容器进程有两种运行模式。 1、前台模式(默认) —— foreground 容器 docker run ... // 或 docker run -d=false ...注意,只有在前台模式下,才有必要设置-it命令选项,为容器设置伪TTY 2、后台模式(也称detached模式) docker run -d ... // 或 docker run -d=true ...注意,只要有-d命令选项,就没有-it命令选项。 当我们启动一个container时,首先需要确定这个container是运行在前台模式还是运行在后台模式。 (1)Detached (-d) 如果在 docker run 后面追加 -d=true 或者 -d,则containter将会运行在后台模式(Detached mode)。此时所有I/O数据只能通过网络资源或者共享卷组来进行交互。因为container不再监听你执行docker run的这个终端命令行窗口。但你可以通过执行docker attach 来重新挂载这个container里面。 需要注意的是,如果你选择执行-d使container进入后台模式,那么将无法配合"--rm"参数。 (2)Foregroud 如果在docker run后面没有追加-d参数,则container将默认进入前台模式(Foregroud mode)。Docker会启动这个container,同时将当前的命令行窗口挂载到container的标准输入,标准输出和标准错误中。也就是container中所有的输出,你都可以再当前窗口中查看到。甚至docker可以虚拟出一个TTY窗口,来执行信号中断。这一切都是可以配置的: -a=[] : Attach to `STDIN`, `STDOUT` and/or `STDERR` -t=false : Allocate a pseudo-tty --sig-proxy=true : Proxify all received signal to the process (non-TTY mode only) -i=false : Keep STDIN open even if not attached如果在执行run命令时没有指定-a,那么docker默认会挂载所有标准数据流,包括输入输出和错误。你可以特别指定挂载哪个标准流。 sudo docker run -a stdin -a stdout -i -t ubuntu /bin/bash (只挂载标准输入输出)对于执行容器内的交互式操作,例如shell脚本。我们必须使用 -i -t 来申请一个控制台同容器进行数据交互。 二、docker run 的 --rm 选项的作用在Docker容器退出时,默认容器内部的文件系统仍然被保留,以方便调试并保留用户数据。但是,对于foreground容器,由于其只是在开发调试过程中短期运行,其用户数据并无保留的必要,因而可以在容器启动时设置 --rm 选项,这样在容器退出时就能够自动清理容器内部的文件系统。示例如下: docker run --rm ba-208 // 等价于 docker run --rm=true ba-208显然,--rm 选项不能与 -d 同时使用(或者说同时使用没有意义),即只能自动清理 foreground 容器,不能自动清理 detached 容器。 注意,--rm 选项也会清理容器的匿名data volumes。 所以,执行 docker run 命令带 --rm 命令选项,等价于在容器退出后,执行docker rm -v。 三、docker的 --rm 与 docker rm 的区别Dockerfile里的VOLUME和docker run -v /path的时候挂载容器的挂载点效果是一致的,会在宿主机/var/lib/docker/volumes目录生成随机目录。 1、使用 docker rm 删除容器 —— 删除容器,挂载点的文件还存在 2、使用 --rm 参数 —— 删除容器,并还会删掉挂载点的数据 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |